package com.lft03.race;

/**
 * Function: 		A {@code Race} 模拟龟兔赛跑<br/>
 * Reason:   		ADD REASON.<br/>
 * Date:            2021-01-26 21:58<br/>
 * <p>
 * Class Name:      Race<br/>
 * Package Name:    com.lft03.race<br/>
 * @author Laifengting / E-mail:laifengting@foxmail.com
 * @version 1.0.0
 * @since JDK 8
 */
public class Race implements Runnable {
	/**
	 * 胜利者
	 */
	private static String winner;
	
	@Override
	public void run() {
		int steps = 100;
		for (int i = 0; i <= steps; i++) {
			// 模拟兔子睡觉
			String name = Thread.currentThread().getName();
			if ("兔子".equals(name) && i % 10 == 0) {
				try {
					Thread.sleep(1);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			// 判断比赛是否结束
			boolean flag = gameOver(i);
			// 如果比赛结束了，就停止程序。
			if (flag) {
				break;
			}
			System.out.println(Thread.currentThread().getName() + " --->跑了 " + i + " 步");
		}
	}
	
	/**
	 * 判断是否完成比赛。
	 */
	private boolean gameOver(int steps) {
		// 判断是否有胜利者
		if (winner != null) {
			// 已经存在胜利者，直接返回真。
			return true;
		} else if (steps >= 100) {
			winner = Thread.currentThread().getName();
			System.out.println("winner is " + winner);
			return true;
		} else {
			return false;
		}
	}
}
	
